package week11;

import java.awt.Graphics;
import java.util.ArrayList;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Color;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;


public class WZQFrame extends JPanel implements WzqCfg{
    //定义画笔
    public Graphics gpaint;
    //定义一个二维数组，存储棋盘的落子情况
    public int[][] isAvail = new int [col][row];
    //turn记录当前的赛点,0-黑,1-白
    public int turn=0;
    //游戏对战方式的标识
    //0-双人对战。1-人机对战，默认
    public int chooseType = 0;
    //保存每一步的落子情况
    //public ArrayList<ChessPosition>ChessPositionList = new ArrayList<ChessPosition>();
    
    //初始化界面
    public void initUI(){
        //初始化界面、设置标题
        JFrame boardFrame = new JFrame();
        boardFrame.setTitle("WZQ");
        boardFrame.setSize(800, 650);//设置窗体大小
        boardFrame.setLocationRelativeTo(null);//创意初始化位置
        boardFrame.setDefaultCloseOperation(3);//窗体的关闭方式
        //界面的布局方式
        boardFrame.setLayout(new BorderLayout());
        
        //设置基本的尺寸属性
        Dimension dim1 = new Dimension(150,0);//设置右半部分大小
        Dimension dim2 = new Dimension(550,0);//设置左半部分大小
        Dimension dim3 = new Dimension(140,40);//设置按钮大小
        
        //设置棋盘大小、颜色
        this.setPreferredSize(dim2);
        this.setBackground(Color.LIGHT_GRAY);
        
        //左侧添加画板、到框架布局的中间部分
        boardFrame.add(this,BorderLayout.CENTER);
        
        //添加一个JPanel容器、设置大小
        JPanel eastP = new JPanel();
        eastP.setPreferredSize(dim1);
        eastP.setBackground(Color.WHITE);
        //将panel添加到框架的东边
        boardFrame.add(eastP,BorderLayout.EAST);
        //设置panel为流式布局
        eastP.setLayout(new FlowLayout());
        
        //设置右边按钮,依次添加到JPanel上,并设置按钮的数目
        String[] butname = {"新游戏","放弃","作者","说明","我的主页"};
        JButton[] button = new JButton[5]; 
        
        //依次将按钮组件加上去
        for(int i = 0;i<butname.length;i++) {
        	button[i]=new JButton(butname[i]);
        	button[i].setPreferredSize(dim3);
        	eastP.add(button[i]);
        }
        
        //设置下拉框
        String[] boxName = {"人机","双人"};
        JComboBox box = new JComboBox(boxName);
        eastP.add(box);
        
        //按钮的监控
        ButtonListener butLis = new ButtonListener(this,box);
        //对每一个按钮加入监听
        for(int i=0;i<butname.length;i++){
            button[i].addActionListener(butLis);
        }
        /* button[2].addActionListener(butLis);
        button[3].addActionListener(butLis);
        button[4].addActionListener(butLis); */

        boardFrame.setVisible(true);
    }
    //画棋盘
    //重写JPanel中的paint方法
    @Override
    public void paint(Graphics g){
        super.paint(g);//先覆盖上一次的棋局
        // for(int i = 0;i<15;i++){
        //     g.drawLine(30, 30+i*35, 30+35*14, 30+i*35);//画横线
        //     g.drawLine(30+i*35, 30, 30+i*35, 30+14*35);//画竖线
        // }
        // 改进棋盘格的绘制算法
        g.setColor(Color.black);
        for(int i = 0;i<col;i++){
            g.drawLine(x, y+size*i, x+size*(col-1), y+size*i);
        }
        for(int i = 0;i<row;i++){
            g.drawLine(x+i*size, y, x+i*size, y+size*(row-1));
        }

        //重绘棋子-黑子-白子
        for(int i = 0 ;i<row;i++)
        {
            for(int j=0;j<col;j++)
            {
                if(isAvail[i][j]==1)//可以落黑子
                {
                    int countx=size*j+20;
                    int county=size*i+20;
                    g.setColor(Color.BLACK);
                    g.fillOval(countx-size/2, county-size/2, size, size);
                }
                else if(isAvail[i][j]==2)//可以落白子
                {
                    int countx=size*j+20;
                    int county=size*i+20;
                    g.setColor(Color.WHITE);
                    g.fillOval(countx-size/2, county-size/2, size, size);
                }
            }
        }
        //重绘棋子-白子
        
    }
    //程序运行的主方法
    public static void main(String[] args) {
        WZQFrame board = new WZQFrame();
        board.initUI();
    }
}
